﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MODULE_KETOAN
{
    class cls_chuyensothanhchu
    {
        private string  DocDonVi(int nSo, Boolean isChuc)
        {
            string kq="";
            switch (nSo)
            {
                case 1:

                    if (isChuc == true)
                    {
                        kq= "mốt";
                    }
                    else
                    {
                        kq=  "một";
                    }
                    break;
                case 2:
                    kq = "hai";
                    break;
                case 3:
                    kq = "ba";
                    break;
                case 4:
                    kq = "bốn";
                    break;
                case 5:
                    if (isChuc == true)
                    {
                        kq = "lăm";
                    }
                    else
                    {
                        kq = "năm";
                    }
                    break;
                case 6:
                    kq = "sáu";
                    break;
                case 7:
                    kq = "bảy";
                    break;
                case 8:
                    kq = "tám";
                    break;
                case 9:
                    kq = "chín";
                    break;
                

            }
            return kq;
        }
        private string DocChuc(long nSo)
        {
            string kq="";
            switch (nSo)
            {
                case 10:
                   
                    kq = "mười";
                  break;
                case 11:
                  kq= "mười một";
                  break;
                case 12:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                    
                  break;
                case 13:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                  break;
                case 14:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                  break;
                case 15:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                  break;
                case 16:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                  break;
                case 17:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                  break;
                case 18:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                  break;
                case 19:
                  kq = "mười " + DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)), true);
                  break;
                default:
                    kq=DocDonVi(int.Parse(nSo.ToString().Substring(0, 1)), false)+" mươi "+DocDonVi(int.Parse(nSo.ToString().Substring(1, 1)),true);
                    break;


            }

            return kq;
        }

        private string DocTram(long nSo)
        {
            string kq = DocDonVi(int.Parse(nSo.ToString().Substring(0, 1)), false)+" trăm ";
            switch (int.Parse(nSo.ToString().Substring(1, 2)))
            {
                case 0:
                    
                    break;
                case 1:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 2:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 3:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 4:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 5:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 6:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 7:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 8:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                case 9:
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 1)), false);
                    break;
                 default:
                    kq=kq+DocChuc(long.Parse(nSo.ToString().Substring(1, 2)));
                    break;

                  
            }

            return kq;

        }
        private string DocNgan(long nSo)
        {
            string kq=DocDonVi(int.Parse(nSo.ToString().Substring(0, 1)), false)+" nghìn ";
           
           
            if(nSo-long.Parse(nSo.ToString().Substring(0, 1))*1000<10)
            {
                switch(nSo-long.Parse(nSo.ToString().Substring(0, 1))*1000)
                {
                        
                    case 0:
                        break;
                    default:
                        kq = kq + " không trăm lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(3, 1)), false);
                        break;
                }
            }
            if (nSo - long.Parse(nSo.ToString().Substring(0, 1)) * 1000 >= 10 && nSo - long.Parse(nSo.ToString().Substring(0, 1)) * 1000 < 99)
            {
                kq = kq + " không trăm " + DocChuc(long.Parse(nSo.ToString().Substring(2, 2)));
            }
            if (nSo - long.Parse(nSo.ToString().Substring(0, 1)) * 1000 > 99)
            {
                kq = kq + DocTram(long.Parse(nSo.ToString().Substring(1, 3)));
            }
            return kq;
        }
        private string DocChucNgan(long nSo)
        {
            string kq=DocChuc(long.Parse(nSo.ToString().Substring(0, 2)));
            if(long.Parse(nSo.ToString().Substring(2, 3))==0)
            {
                kq=kq+" nghìn ";
            }
            else
            {
                if (long.Parse(nSo.ToString().Substring(2, 3)) > 99)
                {
                    kq = kq + " nghìn " + DocTram(long.Parse(nSo.ToString().Substring(2, 3)));
                }
                if (long.Parse(nSo.ToString().Substring(2, 3)) > 9 && long.Parse(nSo.ToString().Substring(2, 3))<=99)
                {
                    kq = kq + " nghìn không trăm " + DocChuc(long.Parse(nSo.ToString().Substring(2, 3)));
                }
                if (long.Parse(nSo.ToString().Substring(2, 3)) <= 9)
                {
                    kq = kq + " nghìn không trăm lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 3)), false);
                }
            }
            return kq;

        }
        private string DocTramNgan(long nSo)
        {
            string kq = DocTram(long.Parse(nSo.ToString().Substring(0, 3)));
            if (long.Parse(nSo.ToString().Substring(3, 3)) == 0)
            {
                kq = kq + " nghìn";
            }
            else
            {
                if (long.Parse(nSo.ToString().Substring(3, 3)) > 99)
                {
                    kq = kq + " nghìn " + DocTram(long.Parse(nSo.ToString().Substring(3, 3)));
                }
                if (long.Parse(nSo.ToString().Substring(3, 3)) > 9 && long.Parse(nSo.ToString().Substring(3, 3))<=99)
                {
                    kq = kq + " nghìn không trăm " + DocChuc(long.Parse(nSo.ToString().Substring(3, 3)));
                }
                if (long.Parse(nSo.ToString().Substring(3, 3)) <=9)
                {
                    kq = kq + " nghìn không trăm lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(3, 3)), false);
                }
            }
            return kq;
        }
        private string DocTrieu(long nSo)
        {
            string kq = DocDonVi(int.Parse(nSo.ToString().Substring(0, 1)), false)+" triệu ";
            if (long.Parse(nSo.ToString().Substring(1, 6)) == 0)
            {

            }
            else
            {
                if (long.Parse(nSo.ToString().Substring(1, 6)) <=9)
                {
                    kq=kq+" lẻ "+DocDonVi(int.Parse(nSo.ToString().Substring(1, 6)),false);

                }
                if(long.Parse(nSo.ToString().Substring(1, 6))> 9 &&long.Parse(nSo.ToString().Substring(1, 6))<=99 )
                {
                    kq = kq + " lẻ " + DocChuc(long.Parse(nSo.ToString().Substring(1, 6)));

                }
                if (long.Parse(nSo.ToString().Substring(1, 6)) > 99 && long.Parse(nSo.ToString().Substring(1, 6)) <= 999)
                {
                    kq = kq + " lẻ " + DocTram(long.Parse(nSo.ToString().Substring(1, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(1, 6)) >999 && long.Parse(nSo.ToString().Substring(1, 6)) <= 9999)
                {
                    kq = kq + " lẻ " + DocNgan(long.Parse(nSo.ToString().Substring(1, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(1, 6)) > 9999 && long.Parse(nSo.ToString().Substring(1, 6)) <= 99999)
                {
                    kq = kq + " lẻ " + DocChucNgan(long.Parse(nSo.ToString().Substring(1, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(1, 6)) > 9999 )
                {
                    kq = kq  + DocTramNgan(long.Parse(nSo.ToString().Substring(1, 6)));
                }


            }

           
            return kq;
        }
        private string DocChucTrieu(long nSo)
        {
            string kq = DocChuc(long.Parse(nSo.ToString().Substring(0, 2)))+" triệu ";
            if (long.Parse(nSo.ToString().Substring(2, 6)) == 0)
            {

            }
            else
            {
                if (long.Parse(nSo.ToString().Substring(2, 6)) <= 9)
                {
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(2, 6)), false);

                }
                if (long.Parse(nSo.ToString().Substring(2, 6)) > 9 && long.Parse(nSo.ToString().Substring(2, 6)) <= 99)
                {
                    kq = kq + " lẻ " + DocChuc(long.Parse(nSo.ToString().Substring(2, 6)));

                }
                if (long.Parse(nSo.ToString().Substring(2, 6)) > 99 && long.Parse(nSo.ToString().Substring(2, 6)) <= 999)
                {
                    kq = kq + " lẻ " + DocTram(long.Parse(nSo.ToString().Substring(2, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(2, 6)) > 999 && long.Parse(nSo.ToString().Substring(2, 6)) <= 9999)
                {
                    kq = kq + " lẻ " + DocNgan(long.Parse(nSo.ToString().Substring(2, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(2, 6)) > 9999 && long.Parse(nSo.ToString().Substring(2, 6)) <= 99999)
                {
                    kq = kq + " lẻ " + DocChucNgan(long.Parse(nSo.ToString().Substring(2, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(2, 6)) > 9999)
                {
                    kq = kq + DocTramNgan(long.Parse(nSo.ToString().Substring(2, 6)));
                }


            }
            
            return kq;
        }
        private string DocTramTrieu(long nSo)
        {
            string kq = DocTram(long.Parse(nSo.ToString().Substring(0, 3))) + " triệu ";
            if (long.Parse(nSo.ToString().Substring(3, 6)) == 0)
            {

            }
            else
            {
                if (long.Parse(nSo.ToString().Substring(3, 6)) <= 9)
                {
                    kq = kq + " lẻ " + DocDonVi(int.Parse(nSo.ToString().Substring(3, 6)), false);

                }
                if (long.Parse(nSo.ToString().Substring(3, 6)) > 9 && long.Parse(nSo.ToString().Substring(3, 6)) <= 99)
                {
                    kq = kq + " lẻ " + DocChuc(long.Parse(nSo.ToString().Substring(3, 6)));

                }
                if (long.Parse(nSo.ToString().Substring(3, 6)) > 99 && long.Parse(nSo.ToString().Substring(3, 6)) <= 999)
                {
                    kq = kq + " lẻ " + DocTram(long.Parse(nSo.ToString().Substring(3, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(3, 6)) > 999 && long.Parse(nSo.ToString().Substring(3, 6)) <= 9999)
                {
                    kq = kq + " lẻ " + DocNgan(long.Parse(nSo.ToString().Substring(3, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(3, 6)) > 9999 && long.Parse(nSo.ToString().Substring(3, 6)) <= 99999)
                {
                    kq = kq + " lẻ " + DocChucNgan(long.Parse(nSo.ToString().Substring(3, 6)));
                }
                if (long.Parse(nSo.ToString().Substring(3, 6)) > 9999)
                {
                    kq = kq + DocTramNgan(long.Parse(nSo.ToString().Substring(3, 6)));
                }


            }
            return kq;
        }
        private string DocTy(long nSo)
        {
            string kq = DocDonVi(int.Parse(nSo.ToString().Substring(0, 1)), false) + " tỷ ";
            long duoi=long.Parse(nSo.ToString().Substring(1, 9));
            if ( duoi== 0)
            {
                //Không làm gì hết
            }
            else
            {
                if (duoi <= 9)
                {
                    kq = kq + " lẻ " + DocDonVi(int.Parse(duoi.ToString()),false);
                }
                if (duoi > 9 && duoi <= 99)
                {
                    kq = kq + " lẻ " + DocChuc(duoi);
                }
                if (duoi > 99 && duoi <= 999)
                {
                    kq = kq + " lẻ " + DocTram(duoi);
                }
                if (duoi > 999 && duoi <= 9999)
                {
                    kq = kq + " lẻ " + DocNgan(duoi);
                }
                if (duoi > 9999 && duoi<=99999)
                {
                    kq = kq + " lẻ " + DocChucNgan(duoi);
                }
                if (duoi > 99999 && duoi <= 999999)
                {
                    kq = kq + "lẻ " + DocTramNgan(duoi);
                }
                if (duoi > 999999 && duoi <= 9999999)
                {
                    kq = kq + " lẻ " + DocTrieu(duoi);
                }
                if (duoi > 9999999 && duoi <= 99999999)
                {
                    kq = kq + " lẻ " + DocChucTrieu(duoi);
                }
                if (duoi > 99999999 && duoi <= 999999999)
                {
                    kq = kq  + DocTramTrieu(duoi);
                }

            }
            return kq;
        }
        public string DocSoThanhChu(long nSo)
        {
            string kq="";
            if (nSo < 10)
            {
                kq=DocDonVi(int.Parse(nSo.ToString()),false);


            }
            if (nSo >= 10 && nSo < 100)
            {
                kq = DocChuc(nSo);
            }
            if (nSo >= 100 && nSo < 1000)
            {
                kq = DocTram(nSo);
            }
            if (nSo >= 1000 && nSo < 10000)
            {
                kq = DocNgan(nSo);
            }
            if (nSo >= 10000 && nSo < 100000)
            {
                kq = DocChucNgan(nSo);
            }
            if (nSo >= 100000 && nSo < 1000000)
            {
                kq =  DocTramNgan(nSo);
            }
            if (nSo >= 1000000 && nSo < 10000000)
            {
                kq =  DocTrieu(nSo);
            }
            if (nSo >= 10000000 && nSo < 100000000)
            {
                kq = DocChucTrieu(nSo);
            }
            if (nSo >= 100000000 && nSo < 1000000000)
            {
                kq = DocTramTrieu(nSo);
            }
            if (nSo > 1000000000 && nSo < 10000000000)
            {
                kq = DocTy(nSo);
            }
            return kq;
        }






    }
}
